package practice;

import java.io.File;
import java.util.Scanner;

// 在指定根目录下查找并删除名字带有关键字的文件
public class SearchAndDeleteFile {
    // 为了递归时输入方便，scanner直接定义成类变量
    private static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        // 用户输入一个指定目录，在当前目录下查找要删除文件
        System.out.println("请输入要扫描的根目录(绝对路径 OR 相对路径)：");
        String rootDirPath = scanner.next();
        File rootDir = new File(rootDirPath);
        if(!rootDir.isDirectory()){
            System.out.println("您输入的根目录不存在或者不是目录，退出！");
            return;
        }

        // 用户输入要删除的文件名关键字
        System.out.println("请输入您要删除文件名的关键字符：");
        String keyNameToDelete = scanner.next();

        // 使用深度优先遍历，查找rootDirPath根目录下的文件或者子目录中有无要删除文件名关键字，有则输入y or Y确认删除
        deleteDir(rootDir, keyNameToDelete);
    }

    // 删除文件
    private static void deleteDir(File rootDir, String keyName) {
        System.out.println("curFile:" + rootDir.getAbsolutePath());  // 查看递归具体当前路径
        File[] files = rootDir.listFiles();
        if (files == null){
            // 当前目录下无文件，之间返回
            return;
        }

        for (File f : files) {
            if(f.isDirectory()){
                // f是目录，那就进一步递归，查找普通文件
                deleteDir(f, keyName);
            }else {
                // f不是目录了，而是文件了，那就在当前f的同级目录下文件当中查找相应的要删除文件
                // 找不到删除文件，就归到上一层调用，然后在这上一层中判断下一个f是目录还是文件，循环操作
                if (f.getName().contains(keyName)){
                    System.out.println("确认删除" + f.getAbsolutePath() + "吗？ y or Y(确认)，任意键取消：");
                    String choice = scanner.next();
                    if(choice.equals("y") || choice.equals("Y")){
                        f.delete();
                        System.out.println("删除成功！");
                    }else {
                        System.out.println("删除取消！");
                    }
                }
            }
        }
    }
}
